Python实现反转链表 您所在的位置:网站首页 python 反转list Python实现反转链表

Python实现反转链表

2023-04-14 19:39| 来源: 网络整理| 查看: 265

之前在遇到这个题目的时候,一直没想明白递归是怎么做的。网络上介绍解法的文章很多,可是大多数不够详细。希望借着这篇文章分享我本人的思路,如有错误,欢迎指正。

题目来源于LeetCode 206,题目要求反转一个单链表。

先给上解题代码,再来详细分析是怎么做到翻转的。

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def reverseList(self, head: ListNode) -> ListNode: if not head: return None if not head.next: return head headNode = self.reverseList(head.next) head.next.next = head head.next = None return headNode

ListNode类不多说,Python实现链表的常用形式。重点关注reverseList( )函数的实现过程。

1.首先函数进入开头的两个if语句,分别是用来判断当前节点和下一个节点是否为NULL,尤其是第二个,在后面递归过程中也会用到。

2.然后开始进入递归,注意传给 self.reverseList( ) 的参数为 head.next ,也就是说链表的会一直往后传递,直到找到最后一个节点(也就是head.val == 5的节点,后文简述为节点5)。此时,因为不满足第二个if语句,返回节点5。

我们可以在第二个if语句中加入一行print( head.val ) ,这样可以更容易看出返回的内容。

3.函数在第二步返回到递归的上一层,headNode 等于返回的节点5 , 也就是节点5作为反转的链表头,完成反转的第一步。

4. 当前节点head为节点4 , head.next指向节点5, head.next.next指向None。 head.next.next= head 让原来指向None的节点5,改为指向节点4,完成了5—>None到5—>4的反转;然后head.next = None , 作用在于截断节点4到节点5的指针,避免形成4—>5—>4的环。

5.同理,返回上一层,当前节点head为节点3,让节点4指向节点3,再截断节点3到节点4的指针。

6.如此重复,直到反转所有节点,headNode即为反转后的链表。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有